Skip to main content

GRPC 框架实现微服务

关于RPC

RPC(Remote Procedure Call Protocol),是远程过程调用的缩写,通俗的说就是调用远处的一个函数。与之相对应的是本地函数调用,我们先来看一下本地函数调用。当我们写下如下代码的时候:

规则
const result = Add(1,2)

我们知道,我们传入了1,2两个参数,调用了本地代码中的一个Add函数,得到result这个返回值。这时参数,返回值,代码段都在一个进程空间内,这是本地函数调用。

那有没有办法,我们能够调用一个跨进程(所以叫"远程",典型的事例,这个进程部署在另一台服务器上)的函数呢?

Alternate text

这就是RPC主要实现的功能,也是微服务的主要功能。

通俗的讲:微服务的实现就是让我们可以像调用本地函数一样调用远程函数

注意

RPC 并不是一种具体的技术框架,而是一种技术思想。广义上讲,任何通过网络,远程调用另一个进程中的方法的技术,都可以称为 RPC。 随着时代的发展,越来越多优秀的 RPC 微服务框架进入我们的视野 ,比如谷歌的 GRPC 框架、阿里的dubbo框架FacebookThrift腾讯的Tars 等。下面我们主要给大家讲讲如何使用 Grpc框架 实现 nodejs 微服务。

GRPC介绍

gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动端和 HTTP/2 设计。目前提供 CJavaGo 语言版本, 分别是:grpc , grpc-java , grpc-go. 其中 C 版本支持 C , C++ , Node.js , Python , Ruby , Objective-C , PHPC# 支持。

  • GRPC 特点:
      1. 提供几乎所有主流语言的实现,打破语言隔阂
      1. 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特
      1. 默认使用 Protocol Buffers 序列化,性能相较于 RESTful Json 好很多
      1. 工具链成熟,代码生成便捷,开箱即用
      1. 支持双向流式的请求和响应,对批量处理、低延时场景友好这些特性使得其在移动设备上表现更好,更省电和节省空间占用。 有了 GRPC , 我们可以一次性的在一个 .proto 文件中定义服务,并使用任何支持它的语言去实现客户端 和服务端。GRPC 默认使用 protocol buffers ,它是 google 开源的一套成熟的结构数据序列化机制(当然 也可以使用其他数据格式如JSON ),可以用 proto files 创建 gRPC 服务,用 protocol buffers 消息类型来 定义方法参数和返回类型。 在 GRPC 客户端可以直接调用不同服务器上的远程程序,就想调用本地程序一样,很容易构建分布式应 用和服务。和很多 RPC 系统一样,服务负责实现定义好的接口并处理客户端请求,客户端根据接口描述 直接调用需要的服务。客户端和服务器可以分别使用 gRP C支持的不同语言实现。

Alternate text

参考资料

gRPC 官方文档中文版

gRPC 官网

使用GRPC官方Example快速实现一个微服务网应用